package easyexcelstyle;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.apache.poi.ss.usermodel.FillPatternType;
import org.apache.poi.ss.usermodel.IndexedColors;

import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.enums.CellDataTypeEnum;
import com.alibaba.excel.metadata.data.CommentData;
import com.alibaba.excel.metadata.data.FormulaData;
import com.alibaba.excel.metadata.data.HyperlinkData;
import com.alibaba.excel.metadata.data.HyperlinkData.HyperlinkType;
import com.alibaba.excel.metadata.data.RichTextStringData;
import com.alibaba.excel.metadata.data.WriteCellData;
import com.alibaba.excel.write.metadata.style.WriteCellStyle;
import com.alibaba.excel.write.metadata.style.WriteFont;

public class StyleTest {
	public static void main(String[] args) {
		String fileName = "writeCellDataWrite" + System.currentTimeMillis() + ".xlsx";
		WriteCellDemoData writeCellDemoData = new WriteCellDemoData();

		// 设置超链接
		HyperlinkData hyperlinkData = new HyperlinkData();
		hyperlinkData.setAddress("https://github.com/alibaba/easyexcel");
		hyperlinkData.setHyperlinkType(HyperlinkType.URL);
		WriteCellData<String> hyperlink = new WriteCellData<String>("官方网站");
		hyperlink.setHyperlinkData(hyperlinkData);
		writeCellDemoData.setHyperlink(hyperlink);
		

		// 设置备注
		WriteCellData<String> comment = new WriteCellData<String>("备注的单元格信息");
		writeCellDemoData.setCommentData(comment);
		CommentData commentData = new CommentData();
		comment.setCommentData(commentData);
		commentData.setAuthor("Jiaju Zhuang");
		commentData.setRichTextStringData(new RichTextStringData("这是一个备注"));
		// 备注的默认大小是按照单元格的大小 这里想调整到4个单元格那么大 所以向后 向下 各额外占用了一个单元格
		commentData.setRelativeLastColumnIndex(1);
		commentData.setRelativeLastRowIndex(1);

		// 设置公式
		WriteCellData<String> formula = new WriteCellData<String>();
		writeCellDemoData.setFormulaData(formula);
		FormulaData formulaData = new FormulaData();
		formula.setFormulaData(formulaData);
		// 将 123456789 中的第一个数字替换成 2
		// 这里只是例子 如果真的涉及到公式 能内存算好尽量内存算好 公式能不用尽量不用
		formulaData.setFormulaValue("REPLACE(123456789,1,1,2)");

		// 设置单个单元格的样式 当然样式 很多的话 也可以用注解等方式。
		WriteCellData<String> writeCellStyle = new WriteCellData<String>("单元格样式");
		writeCellStyle.setType(CellDataTypeEnum.STRING);
		writeCellDemoData.setWriteCellStyle(writeCellStyle);
		WriteCellStyle writeCellStyleData = new WriteCellStyle();
		writeCellStyle.setWriteCellStyle(writeCellStyleData);
		// 这里需要指定 FillPatternType 为FillPatternType.SOLID_FOREGROUND 不然无法显示背景颜色.
		writeCellStyleData.setFillPatternType(FillPatternType.SOLID_FOREGROUND);
		// 背景绿色
		writeCellStyleData.setFillForegroundColor(IndexedColors.GREEN.getIndex());

		// 设置单个单元格多种样式
		// 这里需要设置 inMomery=true 不然会导致无法展示单个单元格多种样式，所以慎用
		WriteCellData<String> richTest = new WriteCellData<String>();
		richTest.setType(CellDataTypeEnum.RICH_TEXT_STRING);
		writeCellDemoData.setRichText(richTest);
		RichTextStringData richTextStringData = new RichTextStringData();
		richTest.setRichTextStringDataValue(richTextStringData);
		richTextStringData.setTextString("红色绿色默认");
		// 前2个字红色
		WriteFont writeFont = new WriteFont();
		writeFont.setColor(IndexedColors.RED.getIndex());
		richTextStringData.applyFont(0, 2, writeFont);
		// 接下来2个字绿色
		writeFont = new WriteFont();
		writeFont.setColor(IndexedColors.GREEN.getIndex());
		richTextStringData.applyFont(2, 4, writeFont);

		List<Object> data = new ArrayList<>();
		data.add(writeCellDemoData);
		
		data.add(Arrays.asList(hyperlink));

		EasyExcel.write(fileName, WriteCellDemoData.class).inMemory(true).sheet("模板").doWrite(data);
	}
}
